//package com.xk.ucs.service;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.json.JSONUtil;
//import com.xk.ucs.config.GlobalSetting;
//import com.xk.ucs.modbus.handler.ModbusHandler;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.List;
//
///**
// * @ClassName ShelfService
// * @Description TODO:
// * @Author zhouLiang
// * @Date 2024/9/22 1:34
// */
//@Service
//@Slf4j
//public class ShelfService {
//
//    @Resource
//    private ModbusHandler modbusHandler;
//    @Resource
//    private AdminRemoteService adminRemoteService;
//
//    /**
//     * 货架扫描
//     * 根据下位机给的数据，初始化每一个货道的数据
//     * @return
//     */
//    public String scanAll(){
//        return initShelf(modbusHandler.scanChannels());
//    }
//
//    public String initShelf(int[] ints){
//        if(ints==null||ints.length==0){
//            log.info("【货道扫描】失败，未收到下位机扫描成功信号");
//            return "货道初始化失败，下位机通信异常";
//        }
//        int boxNo = GlobalSetting.getInstance().getBoxNo();
//        log.info("【货道扫描{}】开始，下位机桉树：{}>>>>>>>>>>>>>>>>>>>>>",boxNo, Arrays.toString(ints));
//        StringBuilder msg = new StringBuilder("货道重置成功");
//        for(int row=1;row<=ints.length;row++){
//            log.info("【货道扫描{}】开始处理第{}排货架，>>>>>>>>>>>>>>>>>>>>>",boxNo,row);
//            // 按层处理
//            List<ShelfGoods> shelfGoodsList = list(new LambdaQueryWrapper<ShelfGoods>()
//                    .eq(ShelfGoods::getBoxNo,boxNo)
//                    .eq(ShelfGoods::getRowNo,row));
//            if(CollUtil.isNotEmpty(shelfGoodsList)){
//                int col = ints[row-1];
//                // 货道数量变多，从列末新增货道
//                if(shelfGoodsList.size()<col){
//                    int maxColNo = shelfGoodsList.stream().map(ShelfGoods::getColNo).reduce(Integer::max).get();
//                    int sub = ints[row-1]-shelfGoodsList.size();
//                    List<ShelfGoods> subShelfGoodsList = new ArrayList<>();
//                    for(int i=1;i<=sub;i++){
//                        ShelfGoods s = new ShelfGoods();
//                        s.setRowNo(row);
//                        s.setColNo(maxColNo+i);
//                        s.setBoxNo(boxNo);
//                        subShelfGoodsList.add(s);
//                    }
//                    adminRemoteService.saveBatchShelf(subShelfGoodsList);
//                    log.info("【货道扫描{}】第{}排货架新增{}个货道，原货道数量:{}",boxNo,row,subShelfGoodsList.size(),shelfGoodsList.size());
//                    msg.append("第[").append(row).append("]层货架货道数量发生变化，请注意核对商品信息，");
//                } else if (shelfGoodsList.size()>ints[row-1]){
//                    // 货道数量变少，从列末删掉多余货道
//                    int sub = shelfGoodsList.size()-ints[row-1];
//                    int maxColNo = shelfGoodsList.stream().map(ShelfGoods::getColNo).reduce(Integer::max).get();
//                    adminRemoteService.removeShelf(new LambdaUpdateWrapper<ShelfGoods>()
//                            .eq(ShelfGoods::getBoxNo,boxNo)
//                            .eq(ShelfGoods::getRowNo,row)
//                            .gt(ShelfGoods::getColNo,maxColNo-sub));
//                    log.info("【货道扫描{}】第{}排货架删除{}个货道，原货道数量:{}",boxNo,row, (maxColNo-sub),shelfGoodsList.size());
//                    msg.append("第[").append(row).append("]层货架货道数量发生变化，请注意核对商品信息，");
//                }
//            } else {
//                log.info("【货道扫描{}】柜子上暂无货道，开始初始化操作>>>>>>>>>>>",boxNo);
//                // 该排没有货道，初始化新货道
//                for(int col=1;col<=ints[row-1];col++){
//                    ShelfGoods shelfGoods = new ShelfGoods();
//                    shelfGoods.setBoxNo(boxNo);
//                    shelfGoods.setRowNo(row);
//                    shelfGoods.setColNo(col);
//                    shelfGoodsList.add(shelfGoods);
//                }
//                saveBatch(shelfGoodsList);
//                shelfGoodsList.clear();
//                log.info("【货道扫描{}】第{}排{}个新货道初始化完成，第{}层货单数据：{}",boxNo,row,ints[row-1],row, JSONUtil.toJsonStr(shelfGoodsList));
//            }
//            log.info("【货道扫描{}】处理第{}排{}个货位处理完成 <<<<<<<<<<<<<<<<<<<<<<<",boxNo,row,ints[row-1]);
//        }
//        return msg.toString();
//    }
//
//
//}
